[Cocos2d-x]第6回cocos2d-x勉強会レポート[TechBuzz]
はじめに
こんばんは!本日開催された
こちらの勉強会についてのレポートを書きます。久しぶりに参加した勉強会で、少し興奮気味でした。
地方で活動していて中々勉強会に参加できない方や、自分のメモも兼ねて議事録調に書きます。
平日開催(結構短いスパンで頻繁に開催されています。)に関わらず、70人以上もの方が参加される勉強会ということでCocos2d-xの注目度の高さ・コミュニティの活発さが伺えます。
株式会社HatchUpさま 挨拶
- 最近のCocos2d-xアプリの市場でのランキングを紹介
- Cocos2d-x.jpの紹介
- 現場直伝! cocos2d-xゲーム開発実践セミナーブックの紹介
- Cocos2d-x.jpでのイベントについての紹介
発表
メインセッション
慶應義塾大学大学院政策・メディア研究科 桜井雄介さま cocos2d-x 3.0 Lua-Bindingsでゲーム開発
前情報
- Cocos2d-x本家中国の開発者の中ではLua bindingsが7割を占める
- 日本では株式会社gumiが主に利用
本題
- Lua bindingsは実際に使えるのか?
- 有名コンシューマゲーム[FF14・アイドルマスターなど]でもLua言語は採用されている
- Luaは軽量スクリプト言語 C++とは正反対
- Cocos2d-xでLuaはどう使われているのか
- C++とLua比較
- コードの記述量自体はそんなに変わらない
- Cocos2d-x3.x系からC++11が使えるようになったのでコールバックなどもあまり変わらない
- Luaでのクラス定義の柔軟さを紹介 継承ではなく拡張
- よく利用されるonEnterやonExitメソッドのLuaでの書き方を紹介
- よく利用されるupdate(スケジューラ)の書き方を紹介 C++と比較して、任意の箇所でコールバック処理を書けるのでLuaの方が柔軟に記述できる
- C++とLua比較
- EclipseベースのIDE、Cocos Code IDEの紹介
- Luaの部分的型推論とコード補完
- 型がないのに型推論が効くのでとても便利
- ビルドとデバッグ
- ブレークポイントとコンソールがLuaでも使える 変数の確認 コールスタックの確認など
- リソースの動的更新
- アプリ内にTCPサーバを2つ立ててランタイムに更新処理(デバッグ中にプログラムが変更でき、即時反映される)
- Cocos2d-x3.0から3.2(現在)までで大幅に改良されている
- Luaの部分的型推論とコード補完
- Lua bindingsでの注意点
- Luaだと使えないクラスがある
- Luaのテーブルで代用ができる
- 配列のインデックスが1から始まる
- ガベージコレクションでメモリを管理(Cocos2d-xは参照カウンタ)
- Lua bindingsの問題点
- ドキュメントがない
- Cocos Code IDEの使用がほぼ前提
- デバッグが物足りない
- スクリプト言語の静的な安全性のなさ(作る効率自体は上がるが将来的な保守性は下がる)
- 思わぬバグに時間を取られる
- Luaを使う利点
- 関数型プログラミングのようなことができる
- リスト、ハッシュマップ操作などがC++に比べて便利
- C++と比較してコールバックメソッドの記述に縛られない
実際にコードを編集しながらゲーム画面を確認している様子
まとめ
何はともあれ動的更新ができるデバッグが超便利!Lua bindingsで開発をするのであれば、Cocos Code IDEを使いましょうとのことでした。
実際にCocos Code IDEとSublime Textを用いて、ライブコーディングデバッグをお見せして下さいました。
Lua bindings自体は十分実用レベルであるようです。自作C++クラスとの連携とかをやろうとすると面倒なようでした。
Cocos2d-x3.0の時にCocos Code IDEの導入記事を書いておりますので、もしLua bindingsに興味を持たれた方がいらっしゃいましたら参考にして下さい。
フリーランス 戸谷直之さま cocos2d-xを使った開発で効率よく多職種連携したい話
本題に入る前に
- デザイナの定義とは
- グラフィックデザイン
- ゲームデザイン
- レベルデザイン
- ソフトウェアデザイン
本題
- デザイナとプログラマのお互いの作業領域について
- お互いに面倒
- 自分の仕事がユーザの元でどういう体験になるか瞬時にプレビューされるべき
- ソシャゲでよくあるフロー:グラフィッカ → マークアップ → エンジニア → ユーザ
- 全てのアクターがユーザに直でコミットできたら良いよね
- 実現するのは難しい。。。エンジニア「SDK入れて、NDK入れて・・・」デザイナ「」
そもそもアセットを変更しただけなのにソースをビルドするのがおかしい
ここで、Cocos Code IDEのネタが桜井氏とかぶる事故が発生。なんとスライドのデザインまでかぶる。
- デザイナとプログラマの共同作業
- リアルタイムデバッグのアセットだけ変えられる良さ
- gitやCI環境、配布環境も含めた開発サイクルの紹介
- resディレクトリをサブモジュールに
- そのresディレクトリはデザイナがgit管理 全てのデザイナがgitを使うというのは敷居の高さがあるので、学習コストはしっかり払いましょう
- Github for Macとかツールを使えば便利
- 別にgitじゃなくてもいい
- 継続的デリバリ
- DeployGateやJenkinsでCIをしよう
- テストも書く
まとめ
- デザイナ同士効率良く連携したい
- それぞれの担当者がビルドをする環境を整えるのは大変
- Cocos2d-xにはHot Updatingがある
- Jenkins / Deploy Gateを組み合わせたらうまくいった
チームビルディングから開発体制を固めていく解説をして頂けました。
ゲームアプリでもCI環境を作るのはとても大事なことですね。リリース・運用をするのであればテストコードもしっかり書くべきだと思いました。
10分LT
熊谷 遼平さま 【Cocos2d-x extensinosの活用(Facebook/Twitter連携など)】
本題に入る前に
Cocos2d-xでリリースしている知育アプリの紹介
本題
- Extentionsを効率的に使おう
-
- Plugin-Xを使ってみてのメリット
- 拡張機能の一元管理
- プロトコルの共通インターフェース
- デメリット
- Cocos2d-xのバージョンアップ対応が面倒
- コンパイルではハマりポイントが多々ある。
- 仕組みの理解に時間がかかる
- 少々使いづらい・・・
- 拡張機能のフォルダ構成を紹介
- どんなExtentionsを採用したか
- LocalizedString(多言語化)
- crypto(暗号化)
- re2(Googleのライブラリ)
- twitter(自作)
- Facebook(自作)
- NativeInterface(ブラウザ起動 / バージョン取得など)
- Plugin-Xを使ってみてのメリット
- 一度Extentionsを作成すれば使い回しが効く
- ブラウザから戻ってきた時のコールバック処理なども作成している(後日githubで公開予定)
-
おまけ
- クラウドソーシングのすすめ
- 音声データなど依頼すると、アジアの方々から早い・品質が高い素材を受け取ることができた
まとめ
Extentionsはどんどん作っていった方が良さそうです。
開発 → リリースのサイクルを早く回すことは特にカジュアルゲームでは重要な事なので抑えておいた方が良いでしょう。
竹井 英行さま 【ネイティブ連携でPlugAirをcocos2d-xで使えるようにしてみよう】
Cocos2d-xはver3.x以降から触ったようです。(CCPrefixとか知らない...)
- PlugAirについての紹介
- ゲームアプリでもPlugAirを使いたい
- イヤホンジャックから電源を給電してマイコンを動かす
- cppファイルからロボットを操作
- PlugAir APIはObjective-C(C++含む)で実装
- delegate経由でPlugAir APIを実行
- C++ → Objective C++ → Objective-Cの解説とデモ
まとめ
ハードウェア + Cocos2d-xのネイティブ連携は私自身非常に興味深いです。
かわいいロボット型のイヤホンジャックを抜き差しする事でCocos2d-xアプリの挙動が変わるというデモを見せて頂けました。
「触る」というアクションで、ユーザにダイレクトに楽しさを伝えられるのがハードウェアの良いところですね。
総評
Cocos2d-xについて目新しい事はありませんでしたが、久しぶりに勉強会に参加できたのが良かったです。
Luaのドキュメントを日本語で書いてくれる人を会場で募っていたり、やはり勉強会に出ないとわからない面白さや温度感がありました。
オープンソースフレームワークの普及には、コミュニティの活動が欠かせません。Cocos2d-x勉強会に参加すれば、共感できる人とのコミュニケーションを取る機会が多いです。また、様々な背景から今のCocos2d-xでのアプリ開発に移って来た人がいるので、話題も尽きません。
もし参加したい方がいれば、社会人・学生問わずに思い切って参加してみるべきだと思います。